#include <iostream>

using std::cout;
using std::endl;

class Base
{
public:
    Base()
    {
        cout << "Base()" << endl;
    }

};

class Derived
: public Base
{
public:
    Derived(long derived = 0)
    : Base()
    , _derived(derived)
    {
        cout << "Derived(long = 0)" << endl;
    }

    void print() const
    {
        cout << "_derived : " << _derived << endl;
    }
private:
    long _derived;
};

int main(int argc, char **argv)
{
    //error,错误说法“创建派生类对象，会先执行基类的构造函数，
    //然后执行派生类的构造函数”

    //ok,创建派生类对象的时候，会调用派生类的构造函数，但是
    //派生类是继承基类基类的，所以会吸收基类的数据成员，为了完
    //成从基类这边吸收过来的数据成员的初始化，会借鉴基类的构造
    //函数，完成从基类吸收过来的数据成员的初始化，然后再执行
    //派生类的构造函数的函数体
    Derived d(10);
    d.print();
    return 0;
}

